package com.hj.javase.map;

import lombok.Data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class HashMapDemo1 {

    public static void main(String[] args) {
        /**
         * 100行User的List怎么高效地转为Map？
         * 这里就需要了解HashMap的原理了。
         * 当HashMap没有指定容量时，默认的初始容量是16，当元素个数超过容量的0.75时，HashMap会进行自动的扩容到2倍。
         * 所以当元素个数超过1000时，HashMap的扩容次数就会达到20次，效率非常低。
         * 对于这种情况，需要预先计算好HashMap的初始容量，避免扩容。
         * int capacity = (int) (100 / 0.75f)，算出的结果是133，HashMap的初始容量是大于133的最小的2的幂次方，即256
         */
        List<User> userList = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            User user = new User();
            user.setId("user" + i);
            user.setName("name" + i);
            userList.add(user);
        }

        int capacity = (int) (100 / 0.75f);
        // 这里定义之后，HashMap的初始容量是256
        HashMap<String, User> map = new HashMap<>(capacity);
        for (User user : userList) {
            map.put(user.getId(), user);
        }
        System.out.println(map);
    }
}

@Data
class User {
    private String id;
    private String name;
}
